#include "widget.h"
#include "ui_widget.h"
#include <QPainter> // 画家类
#include <QTimer>

Widget::Widget(QWidget *parent)
        : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 每次点击按钮，向右移动20
    connect(ui->pushButton, &QPushButton::clicked, [=] {
        posX += 20; // 每次向右移动20
        if (posX > width()) // 如果大于当前窗口宽度，从头开始
            posX = 0;

        // 如果要手动调用绘图事件，使用update()
        update();
    });

    // 使用定时器
    auto timer = new QTimer(this);
    connect(timer, &QTimer::timeout, [=] {
        posX += 1; // 每次向右移动20
        if (posX > width()) // 如果大于当前窗口宽度，从头开始
            posX = 0;

        // 如果要手动调用绘图事件，使用update()
        update();
    });

    // 点击按钮，开启/停止定时器
    connect(ui->pushButton_2, &QPushButton::clicked, [=] {
        if (timer_started) {
            ui->pushButton_2->setText("开启图片自动移动");
            timer->stop();
            timer_started = false;
        } else {
            ui->pushButton_2->setText("关闭图片自动移动");
            timer->start(30);
            timer_started = true;
        }
    });
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawEllipse(QPoint(100, 50), 50, 50);
    // 1.1 提高抗锯齿能力 效率低，对比2个圆
    painter.setRenderHint(QPainter::Antialiasing);
    painter.drawEllipse(QPoint(200, 50), 50, 50);

    // 1.2 translate 移动画家位置，默认画家坐标在(0, 0)点
    painter.drawRect(QRect(20, 120, 50, 50));
    painter.translate(100, 0);  // 是基于当前的位置，再移动(100,0)位置，不是直接设置在(100,0)点位置
    painter.save(); // 保存画家的状态
    painter.drawRect(QRect(20, 120, 50, 50));
    painter.translate(100, 0);
    painter.restore();  // 虽然上面又移动了一次，但是这里还原了画家位置，因此第3次画和第2次画是重叠的，只能看到2个矩形
    painter.drawRect(QRect(20, 120, 50, 50));
    painter.translate(-100, 0);

    // 1.3 利用画家 画资源图片
    painter.drawPixmap(posX, 200, QPixmap(":/Image/Cii11.png"));
}
